home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / languages / turbo_part1.lha / modula / examples / src / Mandel.mod < prev    next >
Encoding:
Text File  |  1994-12-03  |  1.8 KB  |  80 lines

  1. MODULE Mandel ;
  2.  
  3. FROM SYSTEM IMPORT ADR ;
  4.  
  5. IMPORT
  6.   E := Exec,
  7.   I := Intuition,
  8.   G := Graphics,
  9.   StdIO,
  10.   StdLib ;
  11.  
  12. CONST
  13.   realC   = 0.2  ;
  14.   imgC    = 0.15 ;
  15.   zoom    = 6.0  ;
  16.   maxI    = 50   ;
  17.   tv      = 200  ;
  18.   th      = 200  ;
  19.  
  20. VAR
  21.   ns    : I.NewScreen ;
  22.   s     : I.ScreenPtr ;
  23.   rp    : G.RastPortPtr ;
  24.   h     : LONGINT ;
  25.   v     : LONGINT ;
  26.   k     : LONGINT ;
  27.   cr    : SHORTREAL ;
  28.   ci    : SHORTREAL ;
  29.   t     : SHORTREAL ;
  30.   zr    : SHORTREAL ;
  31.   zi    : SHORTREAL ;
  32.   horiF : SHORTREAL ;
  33.   vertF : SHORTREAL ;
  34.   loop  : BOOLEAN   ;
  35.   colarr: ARRAY [0..31] OF INTEGER ;
  36.  
  37. BEGIN
  38.   ns := [0,0,320,400,5,1,7,G.LACE,I.CUSTOMSCREEN+I.SCREENQUIET,NIL,""];
  39.   s := I.OpenScreen( ns ) ;
  40.   IF s = NIL THEN RETURN 10 END ;
  41.   StdIO.puts("CTRL-C to quit...") ;
  42.   rp := ADR( s^.RastPort ) ;
  43.  
  44.   colarr := [0000H,0F00H,0F30H,0F60H,0F90H,0FC0H,0FF0H,0CF0H,
  45.          09F0H,06F0H,03F0H,00F0H,00F3H,00F6H,00F9H,00FCH,
  46.          00FFH,00CFH,009FH,006FH,003FH,000FH,030FH,060FH,
  47.          090FH,0C0FH,0F0FH,0F3FH,0F6FH,0F9FH,0FCFH,0FFFH] ;
  48.  
  49.   G.LoadRGB4( ADR( s^.ViewPort ) , ADR( colarr ) , 32 ) ;
  50.  
  51.   horiF := zoom/320.0 ;
  52.   vertF := zoom/400.0 ;
  53.   FOR v := -tv TO 399-tv DO
  54.      ci := imgC + vertF * SHORTFLOAT(v) ;
  55.      FOR h := -th TO 319-th DO
  56.        cr := horiF * SHORTFLOAT(h) + realC ;
  57.        zr := 0.0 ; zi := 0.0 ;
  58.        loop := TRUE ; k := 1 ;
  59.        WHILE ( k <= maxI ) & loop DO
  60.          t := zr ;
  61.          zr := (zr*zr)-(zi*zi)+cr ;
  62.          zi := 2.0*t*zi+ci ;
  63.          IF (zr*zr)+(zi*zi) >= 4.0 THEN loop := FALSE END ;
  64.          INC( k );
  65.        END ;
  66.        IF k < maxI THEN G.SetAPen( rp, k MOD 32 )
  67.        ELSE G.SetAPen( rp, 0 );
  68.        END ;
  69.        G.WritePixel( rp, h+th, v+tv ) ;
  70.        StdLib.chkabort( )
  71.      END
  72.   END ;
  73.   E.Wait({12}) (* Wait for BREAK signal *)
  74.  
  75. CLOSE
  76.  
  77.   IF s # NIL THEN I.CloseScreen( s ) END
  78.  
  79. END Mandel.
  80.